home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
wics.zip
/
HIERLB.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1993-03-03
|
9KB
|
390 lines
//==============================================================================================
//
// Windows Interface Construction Set
// Version 1.00
//
// HIERLB.CPP - Hierarchial List Box Class Source File
// Copyright ⌐ 1993 by Microdyne Development Technologies.
// All rights reserved.
//==============================================================================================
#include <hierlb.h>
THierarchialListBox::THierarchialListBox (PTWindowsObject AParent, UINT AnID)
: TListBox (AParent, AnID)
{
}
THierarchialListBox::~THierarchialListBox()
{
}
int THierarchialListBox::AddString (LPSTR AString, HANDLE hSubTree, int index)
{
HIERSEARCH hi;
hi.hSubList = hSubTree;
hi.Index = index;
hi.lpszText = AString;
return (int) SendMessage (HWindow, HLB_ADDSTRING, 0, (LPARAM) &hi);
}
void THierarchialListBox::OpenSubTree (HANDLE hParent, int index)
{
SendMessage (HWindow, HLB_OPENSUBTREE, 0, MAKELPARAM(hParent, index));
}
void THierarchialListBox::CloseSubTree (HANDLE hParent, int index)
{
SendMessage (HWindow, HLB_CLOSESUBTREE, 0, MAKELPARAM(hParent, index));
}
int THierarchialListBox::AddString (LPSTR AString)
{
return AddString(AString, NULL, 0);
}
int THierarchialListBox::InsertString(LPSTR AString, int Index)
{
return InsertString (AString, NULL, Index);
}
int THierarchialListBox::InsertString(LPSTR AString, HANDLE hSubTree, int Index)
{
HIERSEARCH hi;
hi.hSubList = hSubTree;
hi.Index = Index;
hi.lpszText = AString;
return (int) SendMessage( HWindow, HLB_INSERTSTRING, 0, (LPARAM) &hi);
}
int THierarchialListBox::DeleteString (int index)
{
return DeleteString(NULL, index);
}
int THierarchialListBox::DeleteString (HANDLE hSubTree, int index)
{
return (int) SendMessage (HWindow, HLB_DELETESTRING, index, MAKELPARAM(hSubTree,0));
}
int THierarchialListBox::FindString (LPSTR AString, int index)
{
int i;
HANDLE hSubTree;
i = index;
hSubTree = NULL;
return FindString (AString, hSubTree, i, FALSE);
}
int THierarchialListBox::FindString (LPSTR AString, HANDLE& hSubTree, int& index, BOOL fSubTableSearch)
{
HIERSEARCH hi;
int iResult;
hi.hSubList = hSubTree;
hi.Index = index;
hi.lpszText = AString;
iResult = (int) SendMessage (HWindow, HLB_FINDSTRING, (WPARAM) fSubTableSearch, (LPARAM) &hi);
hSubTree = hi.hSubList;
index = hi.Index;
return iResult;
}
int THierarchialListBox::FindExactString (LPSTR AString, int index)
{
int i;
HANDLE hSubTree;
i = index;
hSubTree = NULL;
return FindExactString (AString, hSubTree, i, FALSE);
}
int THierarchialListBox::FindExactString (LPSTR AString, HANDLE& hSubTree, int& index, BOOL fSubTableSearch)
{
HIERSEARCH hi;
int iResult;
hi.hSubList = hSubTree;
hi.Index = index;
hi.lpszText = AString;
iResult = (int) SendMessage (HWindow, HLB_FINDSTRINGEXACT, (WPARAM) fSubTableSearch, (LPARAM) &hi);
hSubTree = hi.hSubList;
index = hi.Index;
return iResult;
}
void THierarchialListBox::ClearList()
{
SendMessage (HWindow, HLB_RESETCONTENT, 0, 0L);
}
HANDLE THierarchialListBox::GetChildHandle (HANDLE hList, int index)
{
return (HANDLE) SendMessage (HWindow, HLB_GETCHILDHANDLE, index, MAKELPARAM(hList,0));
}
int THierarchialListBox::GetCount()
{
return (int) SendMessage (HWindow, HLB_GETCOUNT, 0, 0L);
}
int THierarchialListBox::GetCount(HANDLE hList)
{
return (int) SendMessage (HWindow, HLB_GETCOUNT, 0, MAKELPARAM(hList,0));
}
int THierarchialListBox::GetSelString(LPSTR AString, int MaxChars)
{
LRESULT lResult;
HIERSEARCH hi;
int iTextLength;
if ((lResult = SendMessage (HWindow, HLB_GETCURSEL, 0, (LPARAM) &hi.hSubList)) != LB_ERR )
{
hi.Index = (int) lResult;
iTextLength = (int) SendMessage (HWindow, HLB_GETTEXTLEN, 0, (LPARAM)&hi) + 1;
if ( iTextLength >= MaxChars )
{
hi.lpszText = AString;
return (int) SendMessage (HWindow, HLB_GETTEXT, 0, (LPARAM) &hi);
}
else
{
hi.lpszText = new char[iTextLength];
lResult = SendMessage (HWindow, HLB_GETTEXT, 0, (LPARAM) &hi);
_fmemmove (AString, hi.lpszText, MaxChars-1);
*(AString+MaxChars-1) = 0x00;
delete hi.lpszText;
return (int) lResult;
}
}
return 0;
}
int THierarchialListBox::SetSelString(LPSTR Prefix, int SearchIndex)
{
HANDLE hList;
int index ;
hList = NULL;
index = SearchIndex;
return SetSelString(Prefix, hList, index, FALSE);
}
int THierarchialListBox::SetSelString(LPSTR AString, HANDLE& hSubTree, int& index, BOOL fSubTableSearch)
{
HIERSEARCH hi;
int iReturn;
if ( (GetWindowLong(HWindow, GWL_STYLE) & HLBS_MULTIPLESEL) == 0 )
{
hi.hSubList = hSubTree;
hi.Index = index;
hi.lpszText = AString;
iReturn = (int)SendMessage(HWindow, HLB_SELECTSTRING, fSubTableSearch, (long) &hi);
hSubTree = hi.hSubList;
index = hi.Index;
}
else
return -1;
return iReturn;
}
int THierarchialListBox::GetSelIndex()
{
return (int) SendMessage (HWindow, HLB_GETCURSEL, 0, 0L);
}
int THierarchialListBox::GetSelIndex(HANDLE& hSubList)
{
HANDLE hList;
int i;
i = (int) SendMessage (HWindow, HLB_GETCURSEL, 0, (LPARAM) &hList);
hSubList = hList;
return i;
}
int THierarchialListBox::SetSelIndex(int Index)
{
return (int) SendMessage (HWindow, HLB_SETCURSEL, Index, 0L);
}
int THierarchialListBox::SetSelIndex(HANDLE hSubList, int index)
{
return (int) SendMessage (HWindow, HLB_SETCURSEL, index, MAKELPARAM(hSubList,0));
}
int THierarchialListBox::GetSelCount()
{
if ( (GetWindowLong(HWindow, GWL_STYLE) & HLBS_MULTIPLESEL) == 0 )
return GetSelIndex() < 0 ? 0 : 1;
else
return (int)SendMessage(HWindow, HLB_GETSELCOUNT, 0, 0);
}
int THierarchialListBox::GetStringLen(int Index)
{
return GetStringLen(NULL, Index);
}
int THierarchialListBox::GetStringLen(HANDLE hSubTree, int Index)
{
HIERSEARCH hi;
hi.hSubList = hSubTree;
hi.Index = Index;
return (int) SendMessage (HWindow, HLB_GETTEXTLEN, 0, (LPARAM) &hi);
}
int THierarchialListBox::GetString(LPSTR AString, int Index)
{
return GetString(AString, NULL, Index);
}
int THierarchialListBox::GetString(LPSTR AString, HANDLE hSubTree, int index)
{
HIERSEARCH hi;
hi.hSubList = hSubTree;
hi.Index = index;
hi.lpszText = AString;
return (int) SendMessage (HWindow, HLB_GETTEXT, 0, (LPARAM) &hi);
}
int THierarchialListBox::GetSelStrings(LPSTR *Strings, int MaxCount, int MaxChars)
{
int I, TmpStringLen;
long * Selections;
Pchar TmpString;
if ( (GetWindowLong(HWindow, GWL_STYLE) & HLBS_MULTIPLESEL) == 0 )
return -1;
I = GetSelCount();
if ( I < MaxCount )
MaxCount = I;
if ( MaxCount > 0 )
{
Selections = new long[MaxCount];
SendMessage(HWindow, HLB_GETSELITEMS, MaxCount, (long)(Selections));
for (int SelIndex = 0; SelIndex < MaxCount; SelIndex++)
{
TmpStringLen = GetStringLen(LOWORD(Selections[SelIndex]), HIWORD(Selections[SelIndex]));
if ( MaxChars >= TmpStringLen )
GetString(Strings[SelIndex], LOWORD(Selections[SelIndex]), HIWORD(Selections[SelIndex]));
else
{
TmpString = new char [TmpStringLen+1];
if ( TmpString )
{
GetString(TmpString, LOWORD(Selections[SelIndex]), HIWORD(Selections[SelIndex]));
_fstrncpy(Strings[SelIndex], TmpString, MaxChars);
delete TmpString;
}
}
}
delete Selections;
}
return MaxCount;
}
int THierarchialListBox::SetSelStrings(LPSTR *Prefixes, int NumSelections, BOOL ShouldSet)
{
HANDLE hList;
int SelIndex, Successes = 0;
if ( (GetWindowLong(HWindow, GWL_STYLE) & HLBS_MULTIPLESEL) == 0 )
return -1;
if ( NumSelections > -1 )
{
for ( int I = 0; I < NumSelections; I++ )
{
if (FindString (Prefixes[I], hList, SelIndex, TRUE) == 0 )
if ( (int) SendMessage(HWindow, HLB_SETSEL, ShouldSet, MAKELPARAM(SelIndex,hList)) > -1 )
Successes++;
}
}
else
return (int)SendMessage(HWindow, HLB_SETSEL, ShouldSet, MAKELPARAM(-1,0));
return Successes;
}
int THierarchialListBox::GetSelIndexes(long far * Indexes, int MaxCount)
{
if ( (GetWindowLong(HWindow, GWL_STYLE) & HLBS_MULTIPLESEL) == 0 )
return -1;
return (int)SendMessage(HWindow, HLB_GETSELITEMS, MaxCount, (long)(Indexes));
}
int THierarchialListBox::SetSelIndexes(long far * Indexes, int NumSelections, BOOL ShouldSet)
{
HANDLE hList;
int index;
int Successes = 0;
if ( (GetWindowLong(HWindow, GWL_STYLE) & HLBS_MULTIPLESEL) == 0 )
return -1;
if ( NumSelections > -1 )
{
for ( int I = 0; I < NumSelections; I++ )
{
hList = LOWORD(Indexes[I]);
index = HIWORD(Indexes[I]);
if ( (int)SendMessage(HWindow, HLB_SETSEL, ShouldSet, MAKELPARAM(hList, index)) > -1 )
Successes++;
}
}
else
return (int)SendMessage(HWindow, HLB_SETSEL, ShouldSet, MAKELPARAM(0,-1));
return Successes;
}
// Transfer is not supported in this version of WICS. This function is placed here as a
// place holder to override the Transfer of TListBox. Transfer will be supported in a
// future release of this product.
WORD THierarchialListBox::Transfer(Pvoid , WORD )
{
return 0;
}